<?php
namespace api\models;

use api\models\base\BaseForm;
use common\models\Active;
use common\models\Goods;

/**
 * 活动商品 逻辑层
 */
class ActiveGoodForm extends BaseForm
{

    /**
     * 获取有效抢购活动 商品列表
     */
    public function getValidActiveGoodList()
    {
        /*

        ->from( [ 'a' => Active::tableName() ] )
            ->select( $field2select )

         */

        $field2select = [
            'a.id','a.title','a.time_begin','a.time_end','a.sys_status',
        ];

        return Active::find()
            ->from( [ 'a' => Active::tableName() ] )
            ->with( 'goods' )
            ->where( [ 'a.sys_status' => 1 ] )
            ->asArray()
            ->all();
    }

    /**
     * 从缓存中更新商品的剩余数量
     * @param $id
     * @param $num
     */
    public function changeLeftNumCached($id, $num) {
        $key = 'info_g_' . $id;
        $left = \Yii::$app->redis->hincrby($key, 'num_left', $num); // 不能用set,并发时 卡位置很容易 出现脏数据
        return $left;
    }

    /**
     * 更新商品的剩余数量
     * @param $id 商品ID
     * @param $num 商品变化数量，大于0则增加，小于0则减少
     * @return mixed
     *
     * todo 自增自减
     */
    public function changeLeftNum($id, $num)
    {
        $good_model = new Goods();
        $good_num = $good_model->find()->where( [ 'id' => $id ] )->one();
        return $good_num->updateCounters( [ 'num_left' => ( $num ) ] );
    }


    /**
     * @param $id
     * @param $status
     * @return mixed
     */
    public function changeStatusCached($id, $status) {
        $key = 'st_g_' . $id;
        return \Yii::$app->redis->set($key, $status);
    }

}
